package cn.szabadsag.base.service.impl;

import cn.szabadsag.base.service.ICodeService;
import cn.szabadsag.utils.StrUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import java.util.Map;
import java.util.concurrent.TimeUnit;

/**
 * @author yangcong
 * @date 2022年03月11日 0:20
 * @since
 */
@Service
public class CodeServiceImpl implements ICodeService {


    @Autowired
    private RedisTemplate redisTemplate;


    /**
     * 发送验证码
     * @param map
     */
    @Override
    public void sendCode(Map<String, String> map) throws Exception {

        //  获取请求参数
        String phone = map.get("phone");
        String codeType = map.get("codeType");
        //  获取存储在redis中的验证码
        String codeInRedis = (String)redisTemplate.opsForValue().get(phone + ":" + codeType);
        //  产生六位数的验证码
        String verifyCode = StrUtils.getRandomString(6);
        if(codeInRedis != null) {
            //  获取上一次存储验证码的时间
            Long preTime = Long.valueOf(codeInRedis.split(":")[1]);
            if((System.currentTimeMillis() - preTime) < 60 * 1000){
                throw new Exception("发送过于频繁，请稍后再试！！！");
            }else {
                //  获取上一次发送的验证码
                verifyCode = codeInRedis.split(":")[0];
            }
        }
        //  向目标手机发送验证码
        //SendMsgUtils.sendCode(phone,verifyCode);

        System.out.println("本次的验证码是：" + verifyCode);

        //  将验证码放到redis中，并且设置有效时间
        redisTemplate.opsForValue().set(phone + ":" + codeType,verifyCode + ":" + System.currentTimeMillis(), 5, TimeUnit.MINUTES);

    }
}
